#Boa:Dialog:Dialog1

import wx
import wx.grid
import utiles
import consultasBD
from decimal import Decimal

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1BUTTON4, wxID_DIALOG1COMBOBOX1, wxID_DIALOG1DATEPICKERCTRL1, 
 wxID_DIALOG1GRID1, wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, 
 wxID_DIALOG1STATICTEXT3, wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, 
 wxID_DIALOG1STATICTEXT6, wxID_DIALOG1STATICTEXT7, wxID_DIALOG1TEXTCTRL1, 
 wxID_DIALOG1TEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(17)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(174, 90), size=wx.Size(898, 522),
              style=wx.DEFAULT_DIALOG_STYLE, title='Clientes que no compran')
        self.SetClientSize(wx.Size(890, 495))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Sucursales', name='staticText1', parent=self,
              pos=wx.Point(8, 8), size=wx.Size(51, 13), style=0)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_DIALOG1COMBOBOX1,
              name='comboBox1', parent=self, pos=wx.Point(8, 24),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox1.SetLabel('')

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self, pos=wx.Point(328, 24), size=wx.Size(40, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='100')

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Puntaje mayor a', name='staticText2', parent=self,
              pos=wx.Point(144, 8), size=wx.Size(79, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self, pos=wx.Point(144, 24), size=wx.Size(80, 21),
              style=wx.TE_RIGHT | wx.TE_LEFT, value='10000')

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='No compran desde', name='staticText3', parent=self,
              pos=wx.Point(232, 8), size=wx.Size(89, 13), style=0)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_DIALOG1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self, pos=wx.Point(232, 24),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Procesar',
              name='button1', parent=self, pos=wx.Point(376, 24),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnProcesar,
              id=wxID_DIALOG1BUTTON1)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Limpiar',
              name='button2', parent=self, pos=wx.Point(648, 24),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_DIALOG1BUTTON2)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Imprimir',
              name='button3', parent=self, pos=wx.Point(728, 24),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnImprimir,
              id=wxID_DIALOG1BUTTON3)

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='Salir',
              name='button4', parent=self, pos=wx.Point(808, 24),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON4)

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(8, 56), size=wx.Size(872, 432),
              style=0)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='Cant', name='staticText4', parent=self, pos=wx.Point(328,
              8), size=wx.Size(23, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='La fecha de Ultima Compra es la que', name='staticText5',
              parent=self, pos=wx.Point(464, 8), size=wx.Size(174, 13),
              style=0)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label='aparece en la sucursal local donde', name='staticText6',
              parent=self, pos=wx.Point(464, 20), size=wx.Size(164, 13),
              style=0)

        self.staticText7 = wx.StaticText(id=wxID_DIALOG1STATICTEXT7,
              label='se imprime este listado.', name='staticText7', parent=self,
              pos=wx.Point(464, 34), size=wx.Size(112, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.cargarSucursales()
        
        #retrocediendo en dias
        fecha1 = self.datePickerCtrl1.GetLabel()
        fecha2 = utiles.formatear_fechabancos2(fecha1)
        from datetime import datetime
        fecha3 = datetime.strptime(fecha2,'%Y/%m/%d')
        fecha4 = utiles.sumarDiasAFecha(fecha3,-90)
        utiles.cargar_fecha(fecha4,self.datePickerCtrl1)
        
        self.crearGrilla()

    def limpiarGrilla(self):
        self.grid1.ClearGrid()
        for fil in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        for col in xrange(self.grid1.GetNumberCols()):
            self.grid1.DeleteCols()
        self.grid1.AppendCols()
        self.grid1.SetColLabelValue(0,' ')

    def OnLimpiar(self, event):
        self.limpiarGrilla()
        self.comboBox1.SetSelection(0)
        self.comboBox1.SetFocus()

    def cargarSucursales(self):
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        self.comboBox1.Append("TODAS")
        for item in resultado:
            self.comboBox1.Append(item["nombre"])
        self.comboBox1.SetSelection(0)
        self.comboBox1.SetEditable(False)

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def crearGrilla(self):
        columnas = [' ']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)

        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.grid1.Refresh()

    def OnSalir(self, event):
        self.Close()

    def validar(self):
        limite = self.textCtrl1.GetLabel()
        try:
            from decimal import Decimal
            limite = Decimal(limite)
        except:
            return False
        if limite < Decimal("0"):
            self.textCtrl1.SetLabel("0")
        cantidad = self.textCtrl2.GetLabel()
        try:
            from decimal import Decimal
            cantidad = Decimal(cantidad)
        except:
            return False
        if cantidad < Decimal("0"):
            return False
        return True        

    def ultimaCompra(self,idcliente):
        a = "SELECT fecha FROM ventas WHERE idcliente='"+idcliente+"' "
        b = "ORDER BY fecha DESC LIMIT 1"
        sql = a + b
        resultado = consultasBD.ordenCruda(sql)
        if resultado == None or resultado == ():
            return ""
        try:
            fecha = resultado[0][0]
            fecha = utiles.convertirFecha(fecha)
        except:
            fecha = "-"
        return fecha

    def OnProcesar(self, event):
        if not self.validar():
            utiles.mensaje(None,"Error en Valor Limite o Cantidad")
            self.OnLimpiar(None)
            self.textCtrl1.SetFocus()
            return
        
        limite = self.textCtrl1.GetLabel()
        if Decimal(limite) == Decimal("0"): 
            opcion1 = ""
        else:
            opcion1 = " AND acumulados >= '"+limite+"' "
        seleccion = str(self.comboBox1.GetSelection())
        if seleccion == "0":
            opcion2 = ""
        else:
            opcion2 = " AND idcliente LIKE '%"+str(seleccion)+"-%'"

        fecha = self.datePickerCtrl1.GetLabel()
        fecha = utiles.formatear_fecha_date3(fecha)+" 00:00:00"
        opcion0 = " fecha >= '"+fecha+"' "

        sql = "SELECT DISTINCT idcliente FROM ventas WHERE "+opcion0
        resultados = consultasBD.ordenCruda(sql)
        compraron = []
        for idcliente in resultados:
            compraron.append(idcliente[0])
        
        a = "SELECT idcliente, nombre, direccion, localidad, telefono, acumulados "
        b = "FROM cliente WHERE 1 "+opcion1+opcion2+" "
        c = "ORDER BY acumulados DESC "
        sql = a+b+c
        clientes = consultasBD.ordenCrudaDict(sql)
        
        self.limpiarGrilla()
        columnas = ['Nro.Cliente','Nombre','Direccion','Localidad',\
                    'Telefono','Ultima\nCompra','Puntos']
        for col,titulo in enumerate(columnas):
            self.grid1.AppendCols()
            self.grid1.SetColLabelValue(col,titulo)
        self.grid1.DeleteCols(self.grid1.GetNumberCols()-1)
        self.grid1.Refresh()
        
        cantidad = Decimal(self.textCtrl2.GetLabel())
        fil = 0
        for cliente in clientes:
            idcliente = cliente["idcliente"]
            if idcliente in compraron: 
                continue
            if idcliente == "1-2":
                continue
            self.grid1.SetCellValue(fil,0,idcliente)
            self.grid1.SetCellValue(fil,1,cliente["nombre"][:25])
            self.grid1.SetCellValue(fil,2,cliente["direccion"][:30])
            self.grid1.SetCellValue(fil,3,cliente["localidad"][:30])
            self.grid1.SetCellValue(fil,4,cliente["telefono"][:20])
            fecha = self.ultimaCompra(idcliente)
            self.grid1.SetCellValue(fil,5,fecha[:10])
            self.grid1.SetCellValue(fil,6,str(cliente["acumulados"]))

            self.grid1.SetCellAlignment(fil, 0, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil, 5, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)

            self.grid1.AppendRows()
            fil+= 1
            cantidad = cantidad - Decimal("1")
            if cantidad == Decimal("0"): break
            
        self.ajustarAnchoColumnas()
        self.comboBox1.SetFocus()

    def OnImprimir(self, event):
        print "Imprimiendo"
        
        f=open("c:\\matrisamor.doc\\reporte-ClientesNoCompran.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 50
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()
            fecha1 = self.datePickerCtrl1.GetLabel()
            
            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="left" width="50%">'
            a+= 'SUSSAN BOUTIQUE<br>Clientes que no compran desde '+fecha1
            a+= '</td>\n'
            a+= '<td valign="top" align="right" width="50%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
            #idcliente,nombre,direccion,localidad,telefono,acumulados
            #0         1      2         3         4        5
            a = '<hr>'
            tama = '"2"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            for col in xrange(self.grid1.GetNumberCols()):
                titulo = self.grid1.GetColLabelValue(col)
                titulo = titulo.replace("\n","<br>")
                a+= '<td valign="top" align="right"><font size='+tama+'>'+titulo+'</font></td> \n'
            a+= '</tr> \n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)
        
        renglon = 0
        orden = 0
        for fil in xrange(self.grid1.GetNumberRows()-1):
            orden+= 1
            tama = '"0.02"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
            for col in xrange(self.grid1.GetNumberCols()):
                valor = self.grid1.GetCellValue(fil,col)
                cadena+= '<td valign="top" align="right"><font size='+tama+'>'+valor+'</font></td> \n'
            cadena+= '</font></tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        cadena = '</table>\n'
        cadena+= '</body>\n</html>\n'
        f.write(cadena)
        f.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-ClientesNoCompran.html")
        
